//
//  CornerRadiusLayer.swift
//  SwiftDemo
//
//  Created by gaobing on 2021/10/29.
//

import UIKit

class CornerRadiusLayer: CALayer {
    override func display() {
//        contentsScale = UIScreen.mainScreen.scale
        super.display()
    }

    var sborderWidth: CGFloat?

    var scornerRadius: CGFloat?

    var sborderColor: UIColor?

    override func draw(in ctx: CGContext) {
        // 将背景色填充为父视图的颜色
        ctx.saveGState()
        ctx.addRect(bounds)
        let fillBackGroundColor = (delegate as! UIView).superview?.backgroundColor ?? UIColor.white
        ctx.setFillColor(fillBackGroundColor.cgColor)
        ctx.fillPath()
        ctx.restoreGState()

        // 从运行时取出参数变量
        let tcornerRadius: CGFloat = scornerRadius ?? 0
        let tborderWidth: CGFloat = sborderWidth ?? 0
        let tborderColor: UIColor = sborderColor ?? UIColor.white

        // 设置圆角的Bezier曲线
        let pp = UIBezierPath(roundedRect: bounds, cornerRadius: tcornerRadius + tborderWidth)

        // 填充背景色
        ctx.saveGState()
        ctx.beginPath()
        ctx.addPath(pp.cgPath)
        ctx.setFillColor((delegate as! UIView).backgroundColor?.cgColor ?? UIColor.white.cgColor)
        ctx.fillPath()
        ctx.restoreGState()

        // 切掉外围
        ctx.saveGState()
        ctx.beginPath()
        ctx.addPath(pp.cgPath)
        ctx.clip()

        // 如果是图片还得绘制图片
        if let image = (delegate as? UIImageView)?.image {
            ctx.draw(image.cgImage!, in: bounds)
        } else {
            // 绘制内容
            super.draw(in: ctx)
        }

        // 绘制边框
        ctx.setStrokeColor(tborderColor.cgColor)

        ctx.addPath(pp.cgPath)

        ctx.setLineWidth(tborderWidth)

        ctx.strokePath()
    }

}
